<?php
/**
 * @name 随机内容生成器
 * @author vipkwd <service@vipkwd.com>
 * @link https://github.com/wxy545812093/vipkwd-phputils
 * @license http://www.apache.org/licenses/LICENSE-2.0
 * @copyright The PHP-Tools
 */
declare(strict_types = 1);

namespace Vipkwd\Utils\Libs\Random;

use \Exception;
use Vipkwd\Utils\Tools;

class PersonName{    
    
    /**
     * 生成随机昵称
     *
     * @return string
     */
    public static function getNickName():string{
        $adj_num=rand(0,count(self::$nickNameAdj)-1);
        $n_num=rand(0,count(self::$nickNameN)-1);
        return self::$nickNameAdj[$adj_num] . self::$nickNameN[$n_num];
    }

    /**
     * 随机女名
     *
     * @param boolean $surNameSupport <true> 是否包含复姓，如：上官、欧阳
     * @return string
     */
    public static function getFemaleName($surNameSupport = true){
        // if(Tools::mathRandom(0, 9) >= 5){
            return self::getFamilyName($surNameSupport) .
                    self::$femaleName[ Tools::mathRandom(0, count(self::$femaleName)-1)] .
                    self::$femaleName[ Tools::mathRandom(0, count(self::$femaleName)-1)];
        // }
        // return self::getFamilyName($surNameSupport) . self::$femaleName[ Tools::mathRandom(0, count(self::$femaleName)-1)];
    }

    /**
     * 随机男名
     *
     * @param boolean $surNameSupport <true> 是否包含复姓，如：上官、欧阳
     * @return string
     */
    public static function getMaleName($surNameSupport = true){
        // if(Tools::mathRandom(0, 1) === 0){
            return self::getFamilyName($surNameSupport) .
                    self::$maleName[ Tools::mathRandom(0, count(self::$maleName)-1)] .
                    self::$maleName[ Tools::mathRandom(0, count(self::$maleName)-1)];
        // }
        // return self::getFamilyName($surNameSupport) . self::$maleName[ Tools::mathRandom(0, count(self::$maleName)-1)];
    }

    /**
     * 获取 百家姓/复姓 列表
     *
     * @return array
     */
    public static function getFamilyNameList():array{
        return [
            "sin" => self::$familyNameSin,
            "sur" => self::$familyNameSur,
        ];
    }

    /**
     * Summary of getFamilyName
     * @param mixed $surNameSupport
     * @reutrn string
     */
    private static function getFamilyName($surNameSupport){
        if($surNameSupport){
            $all = self::allFamilyNames();
            return $all[ Tools::mathRandom(0, count($all) - 1)];
        }else{
            return self::$familyNameSin[ Tools::mathRandom(0, count(self::$familyNameSin) - 1)];
        }
    }

    private static function allNames(){
        return array_merge(self::$femaleName, self::$maleName);
    }

    private static function allFamilyNames(){
        return array_merge(self::$familyNameSin, self::$familyNameSur);
    }

    private static $nickNameAdj = [
        '快乐的','冷静的','醉熏的','潇洒的','糊涂的','积极的','冷酷的','深情的','粗暴的','温柔的','可爱的','愉快的',
        '义气的','认真的','威武的','帅气的','传统的','潇洒的','漂亮的','自然的','专一的','听话的','昏睡的','狂野的',
        '等待的','搞怪的','幽默的','魁梧的','活泼的','开心的','高兴的','超帅的','懵懂的','坦率的','直率的','轻松的',
        '痴情的','完美的','精明的','无聊的','魅力的','丰富的','繁荣的','饱满的','炙热的','暴躁的','碧蓝的','俊逸的',
        '英勇的','健忘的','故意的','无心的','土豪的','朴实的','兴奋的','幸福的','淡定的','不安的','阔达的','孤独的',
        '独特的','疯狂的','时尚的','落后的','风趣的','忧伤的','大胆的','爱笑的','矮小的','健康的','合适的','玩命的',
        '英俊的','霸气的','阳光的','默默的','大力的','孝顺的','忧虑的','着急的','紧张的','善良的','凶狠的','害怕的',
        '重要的','危机的','欢喜的','欣慰的','满意的','跳跃的','诚心的','称心的','如意的','怡然的','娇气的','无奈的',
        '无语的','激动的','愤怒的','美好的','感动的','激情的','激昂的','震动的','虚拟的','超级的','寒冷的','精明的',
        '明理的','犹豫的','忧郁的','寂寞的','奋斗的','勤奋的','现代的','过时的','稳重的','热情的','含蓄的','开放的',
        '无辜的','多情的','纯真的','拉长的','热心的','从容的','体贴的','风中的','曾经的','追寻的','儒雅的','优雅的',
        '开朗的','外向的','内向的','清爽的','文艺的','长情的','平常的','单身的','伶俐的','高大的','懦弱的','柔弱的',
        '爱笑的','乐观的','耍酷的','酷炫的','神勇的','年轻的','唠叨的','瘦瘦的','无情的','包容的','顺心的','畅快的',
        '舒适的','靓丽的','负责的','背后的','简单的','谦让的','彩色的','缥缈的','欢呼的','生动的','复杂的','慈祥的',
        '仁爱的','魔幻的','虚幻的','淡然的','受伤的','雪白的','高高的','糟糕的','顺利的','闪闪的','羞涩的','缓慢的',
        '迅速的','优秀的','聪明的','含糊的','俏皮的','淡淡的','坚强的','平淡的','欣喜的','能干的','灵巧的','友好的',
        '机智的','机灵的','正直的','谨慎的','俭朴的','殷勤的','虚心的','辛勤的','自觉的','无私的','无限的','踏实的',
        '老实的','现实的','可靠的','务实的','拼搏的','个性的','粗犷的','活力的','成就的','勤劳的','单纯的','落寞的',
        '朴素的','悲凉的','忧心的','洁净的','清秀的','自由的','小巧的','单薄的','贪玩的','刻苦的','干净的','壮观的',
        '和谐的','文静的','调皮的','害羞的','安详的','自信的','端庄的','坚定的','美满的','舒心的','温暖的','专注的',
        '勤恳的','美丽的','腼腆的','优美的','甜美的','甜蜜的','整齐的','动人的','典雅的','尊敬的','舒服的','妩媚的',
        '秀丽的','喜悦的','甜美的','彪壮的','强健的','大方的','俊秀的','聪慧的','迷人的','陶醉的','悦耳的','动听的',
        '明亮的','结实的','魁梧的','标致的','清脆的','敏感的','光亮的','大气的','傻傻的','知性的','冷傲的','呆萌的',
        '野性的','隐形的','冷艳的','微笑的','笨笨的','难过的','沉静的','高挑的','失眠的','安静的','纯情的','忐忑的',
        '迷路的','烂漫的','哭泣的','贤惠的','苗条的','温婉的','发嗲的','健壮的','贪玩的','执着的','酷酷的','花痴的',
        '甜甜的','大意的','高贵的','傲娇的','眼大的','粗心的','细腻的','天真的','怕黑的','感性的','飘逸的','细心的',
        '沉默的','斯文的','香蕉','苹果','鲤鱼','鳗鱼','任性的','爱撒娇的','心灵美的','想人陪的','眯眯眼的','会撒娇的',
        '怕孤独的','要减肥的','火星上的','老迟到的','笑点低的','爱听歌的','还单身的','怕孤单的','留胡子的'
    ];

    private static $nickNameN = [
        '嚓茶','凉面','便当','毛豆','花生','可乐','灯泡','音响','野狼','背包','眼神','缘分',
        '雪碧','人生','牛排','蚂蚁','飞鸟','灰狼','斑马','汉堡','悟空','巨人','绿茶','大碗',
        '墨镜','魔镜','煎饼','月饼','月亮','星星','芝麻','啤酒','玫瑰','大叔','小伙','太阳',
        '树叶','芹菜','黄蜂','蜜粉','蜜蜂','信封','西装','外套','裙子','大象','猫咪','母鸡',
        '路灯','蓝天','白云','星月','彩虹','微笑','摩托','板栗','高山','大地','大树','砖头',
        '楼房','水池','鸡翅','蜻蜓','红牛','咖啡','枕头','大船','诺言','钢笔','刺猬','天空',
        '飞机','大炮','冬天','洋葱','春天','夏天','秋天','冬日','航空','毛衣','豌豆','黑米',
        '玉米','眼睛','老鼠','白羊','帅哥','美女','季节','鲜花','服饰','裙子','秀发','大山',
        '火车','汽车','歌曲','舞蹈','老师','导师','方盒','大米','麦片','水杯','水壶','手套',
        '鞋子','鼠标','手机','电脑','书本','奇迹','身影','香烟','夕阳','台灯','宝贝','未来',
        '皮带','钥匙','心锁','故事','花瓣','滑板','画笔','画板','学姐','店员','电源','饼干',
        '宝马','过客','大白','时光','石头','钻石','河马','犀牛','西牛','绿草','抽屉','柜子',
        '往事','寒风','路人','橘子','耳机','鸵鸟','朋友','苗条','铅笔','钢笔','硬币','热狗',
        '大侠','御姐','萝莉','毛巾','期待','盼望','白昼','黑夜','大门','黑裤','哑铃','板凳',
        '枫叶','荷花','乌龟','衬衫','大神','草丛','早晨','心情','茉莉','流沙','蜗牛','猎豹',
        '棒球','篮球','乐曲','电话','网络','世界','中心','鱼','鸡','狗','老虎','鸭子','雨',
        '羽毛','翅膀','外套','火焰','丝袜','书包','钢笔','冷风','烤鸡','大雁','音响','招牌',
        '冰棍','帽子','菠萝','蛋挞','香水','吐司','溪流','黄豆','樱桃','花卷','荔枝','镜子',
        '曲奇','酒窝','紫菜','金鱼','柚子','果汁','项链','煎蛋','唇彩','戒指','雪糕','睫毛',
        '铃铛','手链','香氛','红酒','月光','酸奶','蜡烛','糖豆','薯片','口红','豆芽','发箍',
        '发卡','发夹','发带','铃铛','冬瓜','香菇','短靴','草莓','柠檬','月饼','百合','纸鹤',
        '云朵','芒果','面包','海燕','龙猫','唇膏','鞋垫','绵羊','黑猫','白猫','金毛','山水',
        '金针菇','自行车','保温杯','小土豆','哈密瓜','数据线','冰淇淋','电灯胆','仙人掌','含羞草','机器猫','白开水',
        '自行车','钢铁侠','战斗机','冥王星','胡萝卜','八宝粥','泥猴桃','小鸽子','小蝴蝶','爆米花','小鸭子','小海豚',
        '日记本','小熊猫','小懒猪','小懒虫','百褶裙','小松鼠','小虾米','帆布鞋','火龙果','奇异果','银耳汤','咖啡豆',
        '小蜜蜂','小蚂蚁','高跟鞋','棉花糖','向日葵','水蜜桃','小蝴蝶','小刺猬','小丸子','指甲油','康乃馨','超短裙',
        '乌冬面','棒棒糖','长颈鹿','小馒头','小笼包','小甜瓜','睫毛膏','小蘑菇','跳跳糖','小白菜','小兔子','小天鹅',
        '小猫咪','万宝路','哈密瓜'
    ];

    private static $femaleName = [
        "嘉","琼","桂","娣","叶","璧","璐","娅","琦","晶","妍","茜","秋","珊","莎","锦","黛","青","倩","婷",
        "姣","婉","娴","瑾","颖","露","瑶","怡","婵","雁","蓓","纨","仪","荷","丹","蓉","眉","君","琴","蕊",
        "薇","菁","梦","岚","苑","婕","馨","瑗","琰","韵","融","园","艺","咏","卿","聪","澜","纯","毓","悦",
        "昭","冰","爽","琬","茗","羽","希","宁","欣","飘","育","滢","馥","筠","柔","竹","霭","凝","晓","欢",
        "霄","枫","芸","菲","寒","伊","亚","宜","可","姬","舒","影","荔","枝","思","丽","秀","娟","英","华",
        "慧","巧","美","娜","静","淑","惠","珠","翠","雅","芝","玉","萍","红","娥","玲","芬","芳","燕","彩",
        "春","菊","勤","珍","贞","莉","兰","凤","洁","梅","琳","素","云","莲","真","环","雪","荣","爱","妹",
        "霞","香","月","莺","媛","艳","瑞","凡","佳"
    ];

    private static $maleName = [
        "涛","昌","进","林","有","坚","和","彪","博","诚","先","敬","震","振","壮","会","群","豪","心","邦",
        "承","乐","绍","功","松","善","厚","庆","磊","民","友","裕","河","哲","江","超","浩","亮","政","谦",
        "亨","奇","固","之","轮","翰","朗","伯","宏","言","若","鸣","朋","斌","梁","栋","维","启","克","伦",
        "翔","旭","鹏","泽","晨","辰","士","以","建","家","致","树","炎","德","行","时","泰","盛","雄","琛",
        "钧","冠","策","腾","伟","刚","勇","毅","俊","峰","强","军","平","保","东","文","辉","力","明","永",
        "健","世","广","志","义","兴","良","海","山","仁","波","宁","贵","福","生","龙","元","全","国","胜",
        "学","祥","才","发","成","康","星","光","天","达","安","岩","中","茂","武","新","利","清","飞","彬",
        "富","顺","信","子","杰","楠","榕","风","航","弘"
    ];

    private static $familyNameSin = [
        "艾","安","敖","巴","白","柏","班","包","薄","暴","鲍","贝","毕","边","卞","卜","步","蔡","苍","曹",
        "查","柴","昌","常","巢","车","陈","成","程","池","迟","充","仇","储","淳","从","崔","戴","单","党",
        "邓","狄","翟","刁","丁","东","董","都","堵","杜","段","鄂","樊","范","方","房","费","丰","封","冯",
        "凤","扶","符","伏","甫","傅","富","盖","干","甘","高","戈","葛","耿","龚","公","宫","弓","巩","贡",
        "勾","古","谷","顾","关","官","管","广","桂","郭","国","韩","杭","郝","和","何","赫","贺","衡","洪",
        "弘","红","侯","候","后","胡","花","华","滑","怀","桓","宦","黄","皇","惠","霍","姬","吉","籍","汲",
        "蓟","冀","季","计","纪","家","贾","简","姜","江","蒋","焦","解","金","靳","荆","经","井","景","鞠",
        "居","康","柯","空","孔","寇","匡","赖","蓝","郎","劳","乐","雷","冷","黎","李","厉","利","连","廉",
        "梁","廖","林","凌","刘","柳","龙","隆","娄","卢","鲁","路","禄","陆","吕","罗","骆","麻","马","满",
        "茅","毛","梅","蒙","孟","糜","米","苗","明","莫","慕","牧","穆","那","能","倪","聂","宁","牛","钮",
        "农","欧","潘","庞","裴","彭","蓬","皮","平","蒲","浦","戚","齐","祁","钱","强","乔","秦","秋","丘",
        "曲","屈","权","全","冉","饶","人","任","戎","荣","融","容","茹","阮","桑","沙","山","上","尚","韶",
        "邵","申","沈","慎","盛","师","施","石","时","史","寿","叔","舒","束","双","水","司","松","宋","苏",
        "宿","孙","索","台","太","谭","谈","汤","唐","陶","田","通","童","屠","万","汪","王","危","韦","蔚",
        "魏","尉","卫","文","闻","翁","沃","巫","乌","吴","毋","武","伍","席","习","夏","咸","相","项","向",
        "萧","谢","辛","邢","幸","熊","须","徐","许","宣","薛","严","颜","阎","燕","杨","羊","阳","仰","养",
        "姚","叶","伊","易","益","殷","阴","尹","印","应","雍","尤","游","于","虞","余","俞","鱼","禹","郁",
        "喻","元","袁","越","云","宰","曾","詹","湛","章","张","甄","政","郑","支","治","钟","终","仲","周",
        "朱","诸","祝","卓","宗","邹","祖","左","乜","厍","蒯","俟","夔","隗","邬","邴","邰","郏","郦","郜",
        "郗","酆","芮","荀","莘","蔺","奚","嘤","岑","庾","闵","阙","阚","澹","濮","宓","逄","逯","缪","璩",
        "栾","臧","昝","晁","贲","滕","殳","扈","钭","嵇","窦","褚","胥","竺","裘","暨","羿","訾","瞿",
    ];

    private static $familyNameSur = [
        "百里","佰赏","鲍俎","北堂","碧鲁","伯赏","长孙","陈林","淳于","达奚","单于","第五","东方","东宫","东郭",
        "东里","东门","独孤","端木","段干","范姜","哥舒","公伯","公乘","公户","公坚","公良","公门","公山","公上",
        "公孙","公西","公羊","公冶","公仪","公玉","公仲","公祖","公皙","谷梁","贯丘","归海","赫连","呼延","胡母",
        "黄方","皇甫","即墨","夹谷","晋楚","况后","乐正","梁丘","令狐","陆费","伦续","明哲","墨哈","幕容","慕容",
        "纳兰","南宫","南官","南郭","南门","南荣","年爱","欧阳","漆雕","屈突","壤驷","汝鄢","商牟","上官","申屠",
        "侍其","叔孙","疏束","司空","司寇","司马","司徒","太史","太叔","铁笔","涂钦","拓拔","拓跋","完完","完颜",
        "万俟","王子","微生","尉迟","闻人","巫马","乌雅","西门","夏侯","鲜于","许世","轩辕","言福","阎法","羊舌",
        "阳佟","耶律","有琴","余佴","宇文","辕轩","岳帅","宰父","章佳","张简","郑余","钟离","仲长","仲孙","诸葛",
        "子车","子桑","子书","子阳","宗政","左丘","丌官","亓官","仉督","佘佴","谯笪","闫法","闾丘","闾邱","澹台",
        "濮阳","缑亢","褚师","颛孙",
    ];
}